home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / sml_nj / 93src.lha / src / build / interact.sml < prev    next >
Encoding:
Text File  |  1993-01-27  |  1.5 KB  |  52 lines

  1. signature INTERACT =
  2. sig
  3.   val interact : unit -> unit
  4.   val use_file : string -> unit
  5.   val use_stream : instream -> unit
  6.   val eval_stream : instream * Environment.environment -> 
  7.                        Environment.environment
  8. end
  9.  
  10. functor Interact(structure Machm : CODEGENERATOR) : INTERACT =
  11. struct
  12.   fun stdParams() = {baseEnv= !Environment.pervasiveEnvRef,
  13.              localEnvRef=Environment.topLevelEnvRef,
  14.              parser=Elaborate.parse (fn dec => dec),
  15.              generate=Machm.generate,
  16.              perform=(fn exec => exec()),
  17.              isolate=CompUtil.isolate,
  18.              printer=PPDec.ppDec}
  19.  
  20.   fun interact() =  EvalLoop.interact (stdParams())
  21.   fun use_file (fname: string) =
  22.       (app System.Print.say ["[opening ",fname,"]\n"];
  23.        EvalLoop.eval_stream (stdParams())
  24.           (fname,(open_in fname
  25.               handle Io s =>
  26.                   (app System.Print.say["[use failed: ",s,"]\n"];
  27.                    raise ErrorMsg.Error))))
  28.  
  29.   fun use_stream (stream: instream) =
  30.       EvalLoop.eval_stream (stdParams()) ("<instream>", stream)
  31.  
  32.   fun eval_stream (stream: instream, baseEnv: Environment.environment) : 
  33.       Environment.environment =
  34.       let val localEnvRef = ref Environment.emptyEnv
  35.        in EvalLoop.eval_stream
  36.               {baseEnv=baseEnv,
  37.            localEnvRef=localEnvRef,
  38.            parser=Elaborate.parse (fn dec => dec),
  39.            generate=Machm.generate,
  40.            perform=(fn exec => exec()),
  41.            isolate=CompUtil.isolate,
  42.            printer=PPDec.ppDec}
  43.           ("<instream>", stream);
  44.       !localEnvRef
  45.       end
  46.  
  47. end (* functor Interact *)
  48.  
  49.  
  50.  
  51.  
  52.